<template><div><h2 id="目录结构" tabindex="-1"><a class="header-anchor" href="#目录结构"><span>目录结构</span></a></h2>
<ul>
<li><a href="#introduction">介绍</a></li>
<li><a href="#the-root-directory">根目录</a>
<ul>
<li><a href="#the-root-app-directory"><code v-pre>app</code> 目录</a></li>
<li><a href="#the-bootstrap-directory"><code v-pre>bootstrap</code> 目录</a></li>
<li><a href="#the-config-directory"><code v-pre>config</code> 目录</a></li>
<li><a href="#the-database-directory"><code v-pre>database</code> 目录</a></li>
<li><a href="#the-public-directory"><code v-pre>public</code> 目录</a></li>
<li><a href="#the-resources-directory"><code v-pre>resources</code> 目录</a></li>
<li><a href="#the-routes-directory"><code v-pre>routes</code> 目录</a></li>
<li><a href="#the-storage-directory"><code v-pre>storage</code> 目录</a></li>
<li><a href="#the-tests-directory"><code v-pre>tests</code> 目录</a></li>
<li><a href="#the-vendor-directory"><code v-pre>vendor</code> 目录</a></li>
</ul>
</li>
<li><a href="#the-app-directory">应用程序目录</a>
<ul>
<li><a href="#the-broadcasting-directory"><code v-pre>Broadcasting</code> 目录</a></li>
<li><a href="#the-console-directory"><code v-pre>Console</code> 目录</a></li>
<li><a href="#the-events-directory"><code v-pre>Events</code> 目录</a></li>
<li><a href="#the-exceptions-directory"><code v-pre>Exceptions</code> 目录</a></li>
<li><a href="#the-http-directory"><code v-pre>Http</code> 目录</a></li>
<li><a href="#the-jobs-directory"><code v-pre>Jobs</code> 目录</a></li>
<li><a href="#the-listeners-directory"><code v-pre>Listeners</code> 目录</a></li>
<li><a href="#the-mail-directory"><code v-pre>Mail</code> 目录</a></li>
<li><a href="#the-models-directory"><code v-pre>Models</code> 目录</a></li>
<li><a href="#the-notifications-directory"><code v-pre>Notifications</code> 目录</a></li>
<li><a href="#the-policies-directory"><code v-pre>Policies</code> 目录</a></li>
<li><a href="#the-providers-directory"><code v-pre>Providers</code> 目录</a></li>
<li><a href="#the-rules-directory"><code v-pre>Rules</code> 目录</a></li>
</ul>
</li>
</ul>
<h2 id="介绍" tabindex="-1"><a class="header-anchor" href="#介绍"><span>介绍</span></a></h2>
<p>默认的 Laravel 应用程序结构旨在为大型和小型应用程序提供一个良好的起点。但是你可以自由地组织你的应用程序。Laravel 几乎不会限制任何给定类的位置——只要 Composer 可以自动加载类即可。</p>
<blockquote>
<p><strong>注意</strong><br>
初次使用 Laravel？请查看 <a href="https://bootcamp.laravel.com/" target="_blank" rel="noopener noreferrer">Laravel Bootcamp</a> 以获得该框架的实战指南，同时我们将帮助你构建你的第一个 Laravel 应用。</p>
</blockquote>
<h2 id="根目录" tabindex="-1"><a class="header-anchor" href="#根目录"><span>根目录</span></a></h2>
<h4 id="app-目录" tabindex="-1"><a class="header-anchor" href="#app-目录"><span>App 目录</span></a></h4>
<p><code v-pre>app</code> 目录包含应用程序的核心代码。我们很快将详细探讨这个目录；但是，你的应用程序中几乎所有的类都将在此目录中。</p>
<h4 id="bootstrap-目录" tabindex="-1"><a class="header-anchor" href="#bootstrap-目录"><span>Bootstrap 目录</span></a></h4>
<p><code v-pre>bootstrap</code> 目录包含 <code v-pre>app.php</code> 文件，该文件引导框架。此目录还包含一个 <code v-pre>cache</code> 目录，其中包含框架生成的文件，用于性能优化，例如路由和服务缓存文件。你通常不需要修改此目录中的任何文件。</p>
<h4 id="config-目录" tabindex="-1"><a class="header-anchor" href="#config-目录"><span>Config 目录</span></a></h4>
<p><code v-pre>config</code> 目录，顾名思义，包含所有应用程序的配置文件。建议你阅读所有这些文件并熟悉所有可用选项。</p>
<h4 id="database-目录" tabindex="-1"><a class="header-anchor" href="#database-目录"><span>Database 目录</span></a></h4>
<p><code v-pre>database</code> 目录包含数据库迁移、模型工厂和种子。如果需要，你还可以使用此目录来保存 SQLite 数据库。</p>
<h4 id="public-目录" tabindex="-1"><a class="header-anchor" href="#public-目录"><span>Public 目录</span></a></h4>
<p><code v-pre>public</code> 目录包含 <code v-pre>index.php</code> 文件，该文件是所有进入应用程序的请求的入口点并配置自动加载。此目录还包含你的资源文件，例如图片、JavaScript 和 CSS。</p>
<h4 id="resources-目录" tabindex="-1"><a class="header-anchor" href="#resources-目录"><span>Resources 目录</span></a></h4>
<p><code v-pre>resources</code> 目录包含你的 <a href="https://learnku.com/docs/laravel/10.x/views" target="_blank" rel="noopener noreferrer">视图</a>，以及原始的、未编译的资源文件，例如 CSS 或 JavaScript。</p>
<h4 id="routes-目录" tabindex="-1"><a class="header-anchor" href="#routes-目录"><span>Routes 目录</span></a></h4>
<p><code v-pre>routes</code> 目录包含应用程序的所有路由定义。默认情况下，Laravel 包括几个路由文件：<code v-pre>web.php</code>、<code v-pre>api.php</code>、<code v-pre>console.php</code> 和 <code v-pre>channels.php</code>。</p>
<p><code v-pre>web.php</code> 文件包含 <code v-pre>RouteServiceProvider</code> 将放置在 <code v-pre>web</code> 中间件组中的路由，该组提供会话状态、CSRF 保护和 cookie 加密。如果你的应用程序不提供无状态的 RESTful API，则所有路由都很可能在 <code v-pre>web.php</code> 文件中定义。</p>
<p><code v-pre>api.php</code> 文件包含 <code v-pre>RouteServiceProvider</code> 将放置在 <code v-pre>api</code> 中间件组中的路由。这些路由旨在是无状态的，因此通过这些路由进入应用程序的请求旨在通过令牌进行身份验证，并且不会访问会话状态。</p>
<p><code v-pre>console.php</code> 文件是你可以在其中定义基于闭包的控制台命令的位置。每个闭包都绑定到一个命令实例，允许一种简单的方法与每个命令的 IO 方法进行交互。即使此文件不定义 HTTP 路由，它也定义了基于控制台的入口点（路由）进入你的应用程序。</p>
<p><code v-pre>channels.php</code> 文件是你可以在其中注册所有应用程序支持的 <a href="https://learnku.com/docs/laravel/10.x/broadcasting" target="_blank" rel="noopener noreferrer">事件广播</a> 频道的位置。</p>
<h4 id="storage-目录" tabindex="-1"><a class="header-anchor" href="#storage-目录"><span>Storage 目录</span></a></h4>
<p><code v-pre>storage</code> 目录包含日志、编译后的 Blade 模板、基于文件的会话、文件缓存和框架生成的其他文件。该目录分为 <code v-pre>app</code>、<code v-pre>framework</code> 和 <code v-pre>logs</code> 目录。<code v-pre>app</code> 目录可用于存储应用程序生成的任何文件。<code v-pre>framework</code> 目录用于存储框架生成的文件和缓存。最后，<code v-pre>logs</code> 目录包含应用程序的日志文件。</p>
<p><code v-pre>storage/app/public</code> 目录可用于存储用户生成的文件，例如个人资料头像，应该是公开可访问的。你应该在 <code v-pre>public/storage</code> 创建一个符号链接，该符号链接指向此目录。你可以使用 <code v-pre>php artisan storage:link</code> Artisan 命令创建链接。</p>
<h4 id="tests-目录" tabindex="-1"><a class="header-anchor" href="#tests-目录"><span>Tests 目录</span></a></h4>
<p><code v-pre>tests</code> 目录包含你的自动化测试。 开箱即用的示例 <a href="https://phpunit.de/" target="_blank" rel="noopener noreferrer">PHPUnit</a> 单元测试和功能测试。 每个测试类都应以单词「Test」作为后缀。 你可以使用 <code v-pre>phpunit</code> 或 <code v-pre>php vendor/bin/phpunit</code> 命令运行测试。 或者，如果你想要更详细和更漂亮的测试结果表示，你可以使用 <code v-pre>php artisan test</code> Artisan 命令运行测试</p>
<h4 id="vendor-目录" tabindex="-1"><a class="header-anchor" href="#vendor-目录"><span>Vendor 目录</span></a></h4>
<p><code v-pre>vendor</code> 目录包含你的 <a href="https://getcomposer.org/" target="_blank" rel="noopener noreferrer">Composer</a> 依赖项。</p>
<h2 id="app-目录-1" tabindex="-1"><a class="header-anchor" href="#app-目录-1"><span>App 目录</span></a></h2>
<p>你的大部分应用程序都位于 <code v-pre>app</code> 目录中。默认情况下，此目录在 <code v-pre>App</code> 下命名，并由 Composer 使用 [PSR-4 自动加载标准] (<a href="https://www.php-fig.org/psr/psr-4/" target="_blank" rel="noopener noreferrer">www.php-fig.org/psr/psr-4/</a>) 自动加载。</p>
<p><code v-pre>app</code> 目录包含各种附加目录，例如 <code v-pre>Console</code>、<code v-pre>Http</code> 和 <code v-pre>Providers</code>。将 <code v-pre>Console</code> 和 <code v-pre>Http</code> 目录视为为应用程序核心提供 API。 HTTP 协议和 CLI 都是与应用程序交互的机制，但实际上并不包含应用程序逻辑。换句话说，它们是向你的应用程序发出命令的两种方式。 <code v-pre>Console</code> 目录包含你的所有 Artisan 命令，而 <code v-pre>Http</code> 目录包含你的控制器、中间件和请求。</p>
<p>当你使用 <code v-pre>make</code> Artisan 命令生成类时，会在 <code v-pre>app</code> 目录中生成各种其他目录。因此，例如，在你执行 <code v-pre>make:job</code> Artisan 命令生成作业类之前，<code v-pre>app/Jobs</code> 目录将不存在。</p>
<blockquote>
<p><strong>技巧</strong><br>
<code v-pre>app</code> 目录中的许多类可以由 Artisan 通过命令生成。 要查看可用命令，请在终端中运行 <code v-pre>php artisan list make</code> 命令。</p>
</blockquote>
<h4 id="broadcasting-目录" tabindex="-1"><a class="header-anchor" href="#broadcasting-目录"><span>Broadcasting 目录</span></a></h4>
<p><code v-pre>Broadcasting</code> 目录包含应用程序的所有广播频道类。 这些类是使用 <code v-pre>make:channel</code> 命令生成的。 此目录默认不存在，但会在你创建第一个频道时为你创建。 要了解有关频道的更多信息，请查看有关 <a href="https://learnku.com/docs/laravel/10.x/broadcasting" target="_blank" rel="noopener noreferrer">事件广播</a> 的文档。</p>
<h4 id="console-目录" tabindex="-1"><a class="header-anchor" href="#console-目录"><span>Console 目录</span></a></h4>
<p><code v-pre>Console</code> 目录包含应用程序的所有自定义 Artisan 命令。 这些命令可以使用 <code v-pre>make:command</code> 命令生成。 该目录还包含你的控制台内核，这是你注册自定义 Artisan 命令和定义 <a href="https://learnku.com/docs/laravel/10.x/scheduling" target="_blank" rel="noopener noreferrer">计划任务</a> 的地方。</p>
<h4 id="events-目录" tabindex="-1"><a class="header-anchor" href="#events-目录"><span>Events 目录</span></a></h4>
<p>此目录默认不存在，但会由 <code v-pre>event:generate</code> 和 <code v-pre>make:event</code> Artisan 命令为你创建。 <code v-pre>Events</code> 目录包含 <a href="https://learnku.com/docs/laravel/10.x/events" target="_blank" rel="noopener noreferrer">事件类</a>。 事件可用于提醒应用程序的其他部分发生了给定的操作，从而提供了极大的灵活性和解耦性。</p>
<h4 id="exceptions-目录" tabindex="-1"><a class="header-anchor" href="#exceptions-目录"><span>Exceptions 目录</span></a></h4>
<p><code v-pre>Exceptions</code> 目录包含应用程序的异常处理程序，也是放置应用程序抛出的任何异常的好地方。 如果你想自定义记录或呈现异常的方式，你应该修改此目录中的 <code v-pre>Handler</code> 类。</p>
<h4 id="http-目录" tabindex="-1"><a class="header-anchor" href="#http-目录"><span>Http 目录</span></a></h4>
<p><code v-pre>Http</code> 目录包含你的控制器、中间件和表单请求。 几乎所有处理进入应用程序的请求的逻辑都将放在这个目录中。</p>
<h4 id="jobs-目录" tabindex="-1"><a class="header-anchor" href="#jobs-目录"><span>Jobs 目录</span></a></h4>
<p>该目录默认不存在，但如果你执行 <code v-pre>make:job</code> Artisan 命令，则会为你创建。 <code v-pre>Jobs</code> 目录包含你的应用程序的 <a href="https://learnku.com/docs/laravel/10.x/queues" target="_blank" rel="noopener noreferrer">队列作业</a>。 作业可能由你的应用程序排队或在当前请求生命周期内同步运行。 在当前请求期间同步运行的作业有时被称为「命令」，因为它们是 <a href="https://en.wikipedia.org/wiki/Command_pattern" target="_blank" rel="noopener noreferrer">命令模式</a> 的实现。</p>
<h4 id="listeners-目录" tabindex="-1"><a class="header-anchor" href="#listeners-目录"><span>Listeners 目录</span></a></h4>
<p>此目录默认不存在，但如果你执行 <code v-pre>event:generate</code> 或 <code v-pre>make:listener</code> Artisan 命令，则会为你创建。 <code v-pre>Listeners</code> 目录包含处理你的 <a href="https://learnku.com/docs/laravel/10.x/events" target="_blank" rel="noopener noreferrer">events</a> 的类。 事件侦听器接收事件实例并执行逻辑以响应被触发的事件。 例如，<code v-pre>UserRegistered</code> 事件可能由 <code v-pre>SendWelcomeEmail</code> 监听器处理。</p>
<h4 id="mail-目录" tabindex="-1"><a class="header-anchor" href="#mail-目录"><span>Mail 目录</span></a></h4>
<p>该目录默认不存在，但如果你执行 <code v-pre>make:mail</code> Artisan 命令，则会为你创建。 <code v-pre>Mail</code> 目录包含你的应用程序发送的所有 <a href="https://learnku.com/docs/laravel/10.x/mail" target="_blank" rel="noopener noreferrer">代表电子邮件的类</a>。 Mail 对象允许你将构建电子邮件的所有逻辑封装在一个简单的类中，该类可以使用 <code v-pre>Mail::send</code> 方法发送。</p>
<h4 id="models-目录" tabindex="-1"><a class="header-anchor" href="#models-目录"><span>Models 目录</span></a></h4>
<p><code v-pre>Models</code> 目录包含所有 <a href="https://learnku.com/docs/laravel/10.x/eloquent" target="_blank" rel="noopener noreferrer">Eloquent 模型类</a>。 Laravel 中包含的 Eloquent ORM 提供了一个漂亮、简单的 ActiveRecord 实现来处理你的数据库。 每个数据库表都有一个相应的「模型」，用于与该表进行交互。 模型允许你查询表中的数据，以及将新记录插入表中</p>
<h4 id="notifications-目录" tabindex="-1"><a class="header-anchor" href="#notifications-目录"><span>Notifications 目录</span></a></h4>
<p>默认情况下，此目录不存在，但如果你执行 <code v-pre>make:notification</code> Artisan 命令时会自动生成。 <code v-pre>Notifications</code> 目录包含所有你发送给应用程序的「事务性」 <a href="https://learnku.com/docs/laravel/10.x/notifications" target="_blank" rel="noopener noreferrer">消息通知</a> 。例如关于应用程序内发生的事件的简单通知。Laravel 的通知功能抽象了通过各种驱动程序发送的通知，如电子邮件通知、Slack 信息、SMS 短信通知或数据库存储。</p>
<h4 id="policies-目录" tabindex="-1"><a class="header-anchor" href="#policies-目录"><span>Policies 目录</span></a></h4>
<p>默认情况下，此目录不存在，但如果你执行 <code v-pre>make:policy</code> Artisan 命令会生成。 <code v-pre>Policies</code> 目录包含应用程序的 <a href="https://learnku.com/docs/laravel/10.x/authorization" target="_blank" rel="noopener noreferrer">授权策略类</a>。这些类用于确定用户是否可以对资源执行给定的操作。</p>
<h4 id="providers-目录" tabindex="-1"><a class="header-anchor" href="#providers-目录"><span>Providers 目录</span></a></h4>
<p><code v-pre>Providers</code> 目录包含程序中所有的 <a href="https://learnku.com/docs/laravel/10.x/providers" target="_blank" rel="noopener noreferrer">服务提供者</a>。服务提供者通过在服务容器中绑定服务、注册事件或执行任何其他任务来引导应用程序以应对传入请求。</p>
<p>在一个新的 Laravel 应用程序中，这个目录已经包含了几个提供者。你可以根据需要将自己的提供程序添加到此目录。</p>
<h4 id="rules-目录" tabindex="-1"><a class="header-anchor" href="#rules-目录"><span>Rules 目录</span></a></h4>
<p>默认情况下，此目录不存在，但如果你执行 <code v-pre>make:rule</code> Artisan 命令后会生成。 <code v-pre>Rules</code> 目录包含应用程序用户自定义的验证规则。这些验证规则用于将复杂的验证逻辑封装在一个简单的对象中。有关更多信息，请查看 <a href="https://learnku.com/docs/laravel/10.x/validation" target="_blank" rel="noopener noreferrer">表单验证</a>。</p>
<blockquote>
<p>本译文仅用于学习和交流目的，转载请务必注明文章译者、出处、和本文链接<br>
我们的翻译工作遵照 <a href="https://learnku.com/docs/guide/cc4.0/6589" target="_blank" rel="noopener noreferrer">CC 协议</a>，如果我们的工作有侵犯到您的权益，请及时联系我们。</p>
</blockquote>
<hr>
<blockquote>
<p>原文地址：<a href="https://learnku.com/docs/laravel/10.x/structure/14837" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/10.x/st...</a></p>
<p>译文地址：<a href="https://learnku.com/docs/laravel/10.x/structure/14837" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/10.x/st...</a></p>
</blockquote>
</div></template>


